
/**
 * 
 */
package com.zsrt.day20170410.homework;

import java.util.Scanner;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zsrt.utils.ArrayUtil;

/**
 * 整型数组的增删改查以及快速排序
 * 
 * @author jmj
 * @date 2017年4月10日
 * @time 下午5:49:56
 */
public class IntCRUD {
	
	//定义一个全局变量
	private int[] nums = {21,40,33,22,67};
	private Scanner in ;
	
	//定义一个每次执行程序前需要用到的方法
	@Before
	public void before(){
		in = new Scanner(System.in);
		
	}
	
	@After
	public void after(){
		in.close();
	}
	/**
	 * 数组元素增加的实现
	 * @throws Exception
	 */
	@Test
	public void addTest() throws Exception {
		System.out.println("请输入您想添加的一个数：");
		int anum = in.nextInt();
		add(nums,anum);

	}
	
	/**
	 * 数组元素增加的方法
	 * @param nums
	 * @param newnum
	 */
	public void add(int[] nums,int newnum){
		int[] newnums = new int[nums.length+1];
		//整型数组的增加
		for(int i=0;i<nums.length;i++){
			newnums[i]=nums[i];
		}
		newnums[nums.length] = newnum;
		//排序
	    ArrayUtil.quickSort(newnums, 0, newnums.length-1);
		//输出
		ArrayUtil.printArray(newnums);

	}
	
	/**
	 * 数组查询测试
	 * @throws Exception
	 */
	@Test
	public void searchTest() throws Exception {
		System.out.println("请输入您想查询的一个数：");
		int anum = in.nextInt();
		int index = search(nums,anum);
		//判断元素是否在数组中存在
		if(index>-1){
			System.out.println("这个数字在数组中，其下标为"+index);
		}else{
			System.out.println("这个数字不存在");
		}
			
	}
	/**
	 * 数组的查询
	 * @param num
	 * @param target
	 * @return
	 */
	public int search(int[] num,int target){
		int index =-1;
		//整型数组的查询
		for( index =0;index<num.length;index++){
			if(target==num[index]){
				//元素若在数组中就返回其下标
				return index;
			}
		}
		return -1;
		
	}
	
	/**
	 * 删除数组元素的实现
	 * @throws Exception
	 */
	@Test
	public void deleteTest() throws Exception {
		System.out.println("请输入您想删除的一个数：");
		int anum = in.nextInt();
		int index = search(nums,anum);
		//判断元素是否存在
		if(index>-1){
			System.out.println("这个数字在数组中，其下标为"+index);
			//若存在就进行删除操作
			delete(nums,index);
			
		}else{
			System.out.println("这个数字不存在");
		}
	}
	/**
	 * 数组元素的删除
	 * @param num
	 * @param index
	 */
	public void delete(int[] num,int index){
		//整型数组的删除
		int[] newnum = new int[num.length-1];
		for(int i=0;i<num.length;i++){
			if(i<index){
				newnum[i]=num[i];
			}else if(i==index){
				continue;
			}else{
				newnum[i-1] = num[i];
			}
	    }
	    ArrayUtil.printArray(newnum);
	}	
	
	/**
	 * 数组元素改变的实现
	 * @throws Exception
	 */
	@Test
	public void alterTest() throws Exception {
		System.out.println("请输入您想改变的一个数：");
		int oldnum = in.nextInt();
		int index = search(nums,oldnum);
		//判断元素是否存在
		if(index>-1){
			System.out.println("请输入您想把它改成的数：");
			int target = in.nextInt();
			System.out.println("这个数字在数组中，其下标为"+index);
			alter(nums,index,target);
		}else{
			System.out.println("这个数字不存在");
		}
	}
	/**
	 * 数组元素的改变
	 * @param num
	 * @param index
	 * @param target
	 */
	public void alter(int[] num,int index,int target){
		//整型数组的改变  
		for(int i=0;i<num.length;i++){
			if(i==index){
				num[i] =target;
			}
		}
		//排序
		ArrayUtil.quickSort(num,0 , num.length-1);
		ArrayUtil.printArray(num);
	}

}
